package com.donghua.config;

import com.donghua.controller.interceptor.LoginTicketInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.ArrayList;
import java.util.List;
/**
 * @author Cai Lideng
 * @date 2022年04月23日 上午11:08
 * @description
 */
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {


    @Bean
    public LoginTicketInterceptor LoginTicketInterceptor() {
        return new LoginTicketInterceptor();
    }
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        List<String> excludePath = new ArrayList<>();
        //排除拦截，除了注册登录(此时还没ticket)，其他都拦截
        excludePath.add("/login");  //登录
        excludePath.add("/register");  //注册
        excludePath.add("/users/code"); //发送验证码
        excludePath.add("/postlist"); //首页
        excludePath.add("/assets");  //静态资源
        excludePath.add("/post/detail/*"); //帖子详情
        excludePath.add("/users/profile/*"); //用户个人信息
        excludePath.add("/followees/*"); //用户关注列表
        excludePath.add("/followers/*"); //用户粉丝列表
        excludePath.add("/post/replyDetail"); //回复详情
        excludePath.add("/users/image/*"); //用户的头像或背景
        excludePath.add("/hotPost"); //查看热帖
        excludePath.add("/hotTag"); //查看热标签
        registry.addInterceptor(LoginTicketInterceptor())
                .addPathPatterns("/**")
                .excludePathPatterns(excludePath);
    }

    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurer() {
            /**
             * 跨域请求处理，通过添加跨域请求映射实现
             * @param registry
             */
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/**")  // 为指定路径开启跨域请求处理
                        .allowedOrigins("*") // 允许所有域
                        .allowedMethods("*") // 允许任何方法（post、get等）
                        .allowedHeaders("*") // 允许任何请求头
                        .allowCredentials(true) // 允许证书、cookie
                        .maxAge(3600L); // 在3600秒内，不需要再发送预检验请求，可以缓存该结果
            }
        };
    }

}
